package talayaco.manager;

import java.util.List;
import java.util.Map;

import talayaco.vo.ProveedorVO;

public interface GestionProveedoresMAN {

	/**
	 * Este metodo recibe los datos de un proveedor y lo agrega al sistema
	 * 
	 * @param proveedor
	 *            proveedor a ser agregado al sistema
	 */
	void insertProveedor(Map<String, String> proveedor) throws Exception;

	/**
	 * Este metodo actualiza los datos del proveedor pasado como parametro
	 * 
	 * @param proveedor
	 *            proveedor conteniendo los nuevos datos actualizados
	 */
	void updateProveedor(Map<String, String> proveedor) throws Exception;

	/**
	 * Este metodo elimina el proveedor pasado como parametro
	 * 
	 * @param nombre
	 *            nombre del proveedor a eliminar
	 */
	void deleteProveedor(String nombre) throws Exception;

	/**
	 * Este metodo retorna los datos de un proveedor a partir de su nombre
	 * 
	 * @param nombreProveedor
	 *            nombre del proveedor
	 * @return mapa con todos los datos del proveedor
	 */
	Map<String, String> getProveedorByNombre(String nombreProveedor)
			throws Exception;

	/**
	 * Este metodo retorna una lista de los nombres de los proveedores
	 * 
	 * @return listado de proveedores
	 */
	List<Map<String, String>> getProveedores(String tipoProveedor)
			throws Exception;

	/**
	 * Metodo que obtiene la lista de proveedores para la generacion del reporte
	 * 
	 * @return List de proveedorVO
	 * @throws Exception
	 */
	List<ProveedorVO> getProveedoresVO() throws Exception;

	/**
	 * Este metodo determina si el proveedor que se desea ingresar ya existe en
	 * el sistema
	 * 
	 * @param proveedor
	 *            el proveedor a ingrear
	 * @return true si ya existe, false de lo contrario
	 */
	Boolean existeProveedor(String nombre) throws Exception;

	/**
	 * Metodo que valida que un proveedor no posea movimientos asociados
	 * 
	 * @param nombreProveedor
	 *            Nombre proveedor
	 * @return true
	 * @throws Exception
	 */
	Boolean validarMovimientosProveedor(String nombreProveedor)
			throws Exception;
}
